package it.unicam.ids.pvm.postazione;

/**
 * La classe rappresenta la cassa, parte che gestisce 
 * il denaro contante in forma di monete e banconote, 
 * usato nell'acquisto di un prodotto.
 * Contiene i seguenti attributi:
 * cassa, array contenente il numero di ogni 
 * moneta o banconota presente nel distributore.
 * @author Luca Iachini, Valerio Iachini, Alessandro Cardenà
 *
 */
public class Cassa {
	
        private int cassa[];

        /**
         * Costruttore della classe.
         * Inizializza l'array cassa contenente la quantità 
         * di denaro.
         * @param cassa.
         */
        
        public Cassa(int cassa []) {
                this.cassa=cassa;
        }
        
        /**
         * Il metodo consente di inserire contante 
         * nel distributore.
         * @param c contante inserito in monete 
         * 				o banconote.
         * @param quantita numero di monete 
         * 						o banconote inserite.
         * @throws Exception messaggio d'errore relativo 
         * 						alla quantità immessa.
         */

        public void inserisciContante(Contante c, int quantita) throws Exception {
                if(quantita<0)
                        throw new Exception("Quantita' non valida");//TODO
                cassa[c.posizione()]+=quantita;
                
        
        }
        
        /**
         * Il metodo consente di rilasciare denaro 
         * dal distributore.
         * @param c contante inserito in monete 
         * 				o banconote.
         * @param quantita numero di monete 
         * 						o banconote inserite.
         * @throws Exception messaggio d'errore relativo 
         * 						alla quantità immessa.
         */
        
        public void ritiraContante(Contante c, int quantita) throws Exception {
                if(quantita<0)
                        throw new Exception("Quantita' non valida");//TODO
                if(cassa[c.posizione()]>=quantita){
                        cassa[c.posizione()]-=quantita;
                }
                else
                        throw new Exception("Contante non disponibile");//TODO
        }
        
        /**
         * Il metodo restituisce l'array cassa, contenente 
         * il contante con la relativa quantità.
         * @return cassa.
         */
        
        public int [] getCassa(){
                return cassa;
        }
        
        /**
         * Il metodo restituisce la quantità di monete 
         * o banconote presenti nel distributore.
         * @param c moneta o banconota di cui si vuole 
         * 				conosce la quantità presente.
         * @return quantita.
         */
        
        public int getQuantitaContante(Contante c){
                return cassa[c.posizione()];
        }

}
